#include<iostream>
using namespace std;
int t1[100],t2[100],vis[100],n,ans[100],ansmax=11111;
// void dfs(int x,int end1,int end2,int sum)
// {
//     if(x==n+1)
//     {
//         for(int i=1;i<=n;i++)
//         cout<<ans[i]<<" ";
//         cout<<"**"<<sum<<endl;
//         ansmax=min(sum,ansmax);
//         return;
//     }
//     for(int i=1;i<=n;i++)
//     {
//         if(!vis[i])
//         {
//             vis[i]=1;
//             ans[x]=i;
//             int end11=end1+t1[i],end22=max(end11,end2)+t2[i];
//             if(sum+end22<ansmax)
//             dfs(x+1,end11,end22,sum+end22);
//             vis[i]=0;
//         }
//     }
// }
void dfs(int x,int end1,int end2,int sum)
{
    if(x==n+1)
    {
        for(int i=1;i<=n;i++)
        cout<<ans[i]<<" ";
        cout<<sum<<endl;
        ansmax=sum;
    }
    else{
        for(int i=x;i<=n;i++)
        {
            int end11=end1+t1[ans[i]],end22=max(end11,end2)+t2[ans[i]];
            if(sum+end22<ansmax)
            {
                swap(ans[i],ans[x]);
                dfs(x+1,end11,end22,sum+end22);
                swap(ans[i],ans[x]);
            }
        }
    }
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>t1[i]>>t2[i],ans[i]=i;
    dfs(1,0,0,0);
}